import 'dart:convert';

import 'package:PollOnLine/ui/login/login_view_ipad.dart';
import 'package:get/get_core/src/get_main.dart';
import 'package:get/get_navigation/src/extension_navigation.dart';

import '../bean/UserInfo.dart';
import '../network/UrlPath.dart';
import '../ui/login/login_view.dart';
import '../utils/sp_utils.dart';
import '../utils/utils.dart';
import '../values/CommonParam.dart';

///
/// 用户信息管理
///
class UserInfoManager {
  // 私有构造函数
  UserInfoManager._internal();

  // 保存单例
  static final UserInfoManager _userInfoManager = UserInfoManager._internal();

  // 工厂构造函数
  factory UserInfoManager() => _userInfoManager;

  UserInfo? userInfo;

  /// 初始化
  Future<void> init() async {
    if (await sp.contains(CommonParam.USER_INFO)) {
      String json = await sp.getString(CommonParam.USER_INFO) ?? "";
      //反序列化
      Map<String, dynamic> map = jsonDecode(json);
      userInfo = UserInfo.fromJson(map);
    } else {
      userInfo = null;
    }
  }

  /// 是否登录
  bool isLogin() {
    return userInfo != null;
  }

  /// 设置用户信息
  ///
  /// userInfo  登录成功返回bean
  /// userName  登录账号
  void setUserInfo(UserInfo? userInfo) {
    this.userInfo = userInfo;
    sp.setString(CommonParam.USER_INFO, jsonEncode(userInfo));
    // UmengPushSdk.getRegisteredId().then((value) {
    //   UmengPushSdk.addAlias(userInfo?.userId ?? "", CommonParam.UMENG_PUSH_ALIAS);
    //   UmengPushSdk.setAlias(userInfo?.userId ?? "", CommonParam.UMENG_PUSH_ALIAS);
    // });
  }

  /// 获取 用户信息
  UserInfo? getUserInfo() {
    return userInfo;
  }

  /// 退出登录
  void loginOut() async {
    sp.remove(CommonParam.USER_INFO);
    // sp.remove(CommonParam.INIT_PASSWORD);
    // sp.remove(CommonParam.HISTORY_LIST);
    // UmengPushSdk.removeAlias(userInfo?.userId ?? "", CommonParam.UMENG_PUSH_ALIAS);
    userInfo = null;
    if (isPad(Get.context!)) {
      Get.offAll(() => const LoginPageIpad(title: "登录"));
    } else {
      Get.offAll(() => const LoginPage(title: "登录"));
    }
  }

  /// 获取 token
  String getToken() {
    return userInfo?.token ?? "";
  }

  /// 获取 id
  String getUserId() {
    return userInfo?.userId ?? "";
  }

  /// 获取 租户id
  String getTenantId() {
    return userInfo?.tenantId ?? CommonParam.APP_TENANT_ID;
  }

  /// 获取 租户AppCode
  String getAppCode() {
    if (UrlPath.baseUrl == CommonParam.RELEASE_URL) {
      return CommonParam.APP_CODE;
    } else {
      return CommonParam.APP_DEBUG_CODE;
    }
  }

  /// 获取用户名称
  String getUserName() {
    return userInfo?.userName ?? "";
  }

  /// 获取用户手机号码
  String geTelephone() {
    return userInfo?.telephone ?? "";
  }

  /// 获取 是否修改初始化密码 0需要修改    1不需要修改
// Future<bool> getInitPassword() async {
//   if (await sp.contains(CommonParam.INIT_PASSWORD)) {
//     return false;
//   } else {
//     if (userInfo?.initPassword == "0") {
//       sp.setBool(CommonParam.INIT_PASSWORD, true);
//       return true;
//     }
//   }
//   return false;
// }
}
